Reasoning system